package jm.nj.demo04mian.demo15;
/*
 * 匿名内部类属于局部内部类的一种
 *
 * 作用:把子类继承父类/实现类实现接口,重写父类/接口中的抽象方法,创建子类实现类对象和成一步完成
 * 有了匿名内部类,以后实现类就省略了
 *
 * 格式:
 *       new 父类/接口(){
 *               重写父类/接口的抽象方法:
 *               ...
 *       };
 *
 * new Smoking (){
 *           public void Smoking(){
 *                   System.out.println("匿名内部类使用");
 *           }
 * };
 *
 * 以上一堆代码相当于new Teacher()创建子类对象的过程;
 *
 * 因为匿名内部类就是创建子类对象的 过程,只是这个子类对象没有名字,但是我们可以把匿名内部类赋值给父类/接口
 * Smoking s = new Smoking(){
 *           public void smoke (){
 *                   System.out.println("匿名内部类的使用");
 *           }
 * };
 * */

public class Demo {
    public static void main(String[] args) {
        //接口的使用方式:定义实现类,实现接口,重写接口中的抽象方法,创建实现类对象使用
        /*Somking s = new Teacher();
        s.smoke();*/

        new Teacher().smoke();
        System.out.println("-----");

        //匿名内部类:创建子类/实现类  没有名字,有写在方法中
        new Somking() {
            @Override
            public void smoke() {
                System.out.println("匿名内部类使用");
            }
        }.smoke();

        //new Somking 快捷
        new Somking() {
            @Override
            public void smoke() {
                System.out.println("快捷");
            }
        };

        new Animal() {
            @Override
            public void eat() {
                System.out.println("c");
            }

            @Override
            public void sleep() {
                System.out.println("s");

            }

            @Override
            public void hdd() {
                System.out.println("h");
            }
        }.eat();

        new Animal() {
            @Override
            public void eat() {
                System.out.println("c");
            }

            @Override
            public void sleep() {
                System.out.println("s");

            }

            @Override
            public void hdd() {
                System.out.println("h");
            }
        }.sleep();

        new Animal() {
            @Override
            public void eat() {
                System.out.println("c");
            }

            @Override
            public void sleep() {
                System.out.println("s");

            }

            @Override
            public void hdd() {
                System.out.println("h");
            }
        }.hdd();

        Animal a = new Animal() {
            @Override
            public void eat() {
                System.out.println("c");
            }

            @Override
            public void sleep() {
                System.out.println("s");

            }

            @Override
            public void hdd() {
                System.out.println("h");
            }
        };
        a.sleep();
        a.hdd();
        a.eat();


    }
}
